package net.xiduth.io.io.File;

/*
 * Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */

/* @test
 @bug  4614121 4809375 6437591
 @summary Basic test for deleteOnExit method
 @author kladko
 */

import java.io.File;

public class DeleteOnExit {

	static String tmpdir = System.getProperty("java.io.tmpdir");
	static String java = System.getProperty("java.home") + File.separator
			+ "bin" + File.separator + "java";
	static File file1 = new File(tmpdir + "deletedOnExit1");
	static File file2 = new File(tmpdir + "deletedOnExit2");
	static File file3 = new File(tmpdir + "deletedOnExit3");

	// used to verify deletion order
	static File dir = new File(tmpdir + "deletedOnExitDir");
	static File file4 = new File(dir + File.separator + "deletedOnExit4");
	static File file5 = new File(dir + File.separator
			+ "dxnsdnguidfgejngognrogn");
	static File file6 = new File(dir + File.separator
			+ "mmmmmmsdmfgmdsmfgmdsfgm");
	static File file7 = new File(dir + File.separator + "12345566777");

	public static void main(String args[]) throws Exception {
		if (args.length == 0) {
			Runtime.getRuntime().exec(java + " DeleteOnExit -test").waitFor();
			if (file1.exists() || file2.exists() || file3.exists()
					|| dir.exists() || file4.exists() || file5.exists()
					|| file6.exists() || file7.exists()) {

				System.out.println(file1 + ", exists = " + file1.exists());
				System.out.println(file2 + ", exists = " + file2.exists());
				System.out.println(file3 + ", exists = " + file3.exists());
				System.out.println(dir + ", exists = " + dir.exists());
				System.out.println(file4 + ", exists = " + file4.exists());
				System.out.println(file5 + ", exists = " + file5.exists());
				System.out.println(file6 + ", exists = " + file6.exists());
				System.out.println(file7 + ", exists = " + file7.exists());

				// cleanup undeleted dir if test fails
				dir.delete();

				throw new Exception("File exists");
			}
		} else {
			file1.createNewFile();
			file2.createNewFile();
			file3.createNewFile();
			file1.deleteOnExit();
			file2.deleteOnExit();
			file3.deleteOnExit();

			// verify that deleting a File marked deleteOnExit will not cause a
			// problem
			// during shutdown.
			file3.delete();

			// verify that calling deleteOnExit multiple times on a File does
			// not cause
			// a problem during shutdown.
			file2.deleteOnExit();
			file2.deleteOnExit();
			file2.deleteOnExit();

			// Verify DeleteOnExit Internal implementation deletion order.
			if (dir.mkdir()) {
				dir.deleteOnExit();

				file4.createNewFile();
				file5.createNewFile();
				file6.createNewFile();
				file7.createNewFile();

				file4.deleteOnExit();
				file5.deleteOnExit();
				file6.deleteOnExit();
				file7.deleteOnExit();
			}
		}
	}
}
